package estadistec.logica.tabla;

import estadistec.logica.tipos.TipoValor;
import estadistec.logica.Constantes;

import estadistec.excepciones.ExcepcionMetodoInexistente;
import estadistec.excepciones.ExcepcionFormatoNumeros;

/** 
 * Clase para los valores de tipo Booleano.
 **/
public class MBooleana extends Medida<Boolean> {

	/** 
	 * Constructor. 
	 */
	public MBooleana (String nombre, LTabla padre, Long llave) {
		this._valor = null;
		this.setNombre(nombre);
		this._lTabla = padre;
		this._llave = llave;
	}

	public void setValor (Boolean valor) {
		this._valor = new Boolean(valor);
	}

	/** 
	 * @see estadistec.logica.tipos.Valores#getTipo
	 */
	public TipoValor getTipo() {
		return TipoValor.BOOLEANO;
	}

	/** 
	 * @see estadistec.logica.tipos.Valores#setNoDecimales
	 */
	public void setNoDecimales (int n) {
		throw new ExcepcionMetodoInexistente("MBooleana->setNoDecimales");
	}

	/** 
	 * @see estadistec.logica.tipos.Valores#getNoDecimales
	 */
	public int getNoDecimales () {
		throw new ExcepcionMetodoInexistente("MBooleana->getNoDecimales");
	}

	protected Boolean _obtenerValor (String texto) {
		return (obtenerValor(texto));
	}

	protected String _obtenerTexto (Boolean valor) {
		return (obtenerTexto(valor));
	}

	/** 
	 * Método que convierte de un String que representa falso o verdadero
	 * a un valor de tipo Boolean. El string para la representación de
	 * dichos valores se encuentra en 
	 * {@link estadistec.logica.Constantes#FALSO} y en
	 * {@link estadistec.logica.Constantes#VERDADERO}.
	 * 
	 * @param texto String que representa al posible valor.
	 *
	 * @throws ExepcionFormatoValor En caso de que el argumento
	 * no corresponda a ninguno de los casos.
	 */
	static public Boolean obtenerValor (String texto)  
		throws ExcepcionFormatoNumeros
	{
		if (texto == Constantes.FALSO)
			return (new Boolean(false));
		else if (texto == Constantes.VERDADERO)
			return (new Boolean(true));
		else
			throw new ExcepcionFormatoNumeros("Se esperaba " 
					+ Constantes.FALSO + " o " + Constantes.VERDADERO);
	}

	/** 
	 * Convierte un valor de tipo Boolean a un string.
	 */
	static public String obtenerTexto(Boolean valor) 
	{
		if (valor.booleanValue() == true)
			return Constantes.VERDADERO;
		else
			return Constantes.FALSO;
	}

}
